// Package response pkg/response/response.go
package response

import "github.com/gin-gonic/gin"

// Response 统一API响应结构
type Response struct {
	Code    ResponseCode `json:"code"`    // 状态码
	Message string       `json:"message"` // 提示信息
	Data    interface{}  `json:"data"`    // 数据
}

// Result 通用响应处理
func Result(c *gin.Context, code ResponseCode, message string, data interface{}) {
	// 如果没有提供自定义消息，则使用默认消息
	if message == "" {
		message = GetMessage(code)
	}

	c.JSON(200, Response{
		Code:    code,
		Message: message,
		Data:    data,
	})
}

// Success 成功响应
func Success(c *gin.Context, data interface{}) {
	Result(c, OK, "ok", data)
}

// SuccessWithMessage 带消息的成功响应
func SuccessWithMessage(c *gin.Context, message string, data interface{}) {
	Result(c, OK, message, data)
}

// Fail 失败响应
func Fail(c *gin.Context, code ResponseCode, message string) {
	Result(c, code, message, nil)
}

// 成功响应
// 	response.Success(c, map[string]interface{}{"id": 1})

// 带自定义消息的成功响应
// 	response.SuccessWithMessage(c, "用户创建成功", nil)

// 错误响应
//   response.Fail(c, response.BadRequest, "用户名已存在")

// 使用默认错误消息
//		response.Fail(c, response.ErrParams, "")

// 完全自定义响应
//	response.Result(c, response.Created, "资源已创建", map[string]interface{}{"id": 2})
